package com.atguigu.day18.generic03.g2;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;
/*
通配符的下限: ? super 类型
                   未知类型 最低是指定类型 也可以是指定类型的父亲
 */
public class GenericSuper {
    Dog[] arr;

    @Before
    public void test00() {
        //1.创建小狗对象
        Dog d1 = new Dog("旺财", 2, 3.6);
        Dog d2 = new Dog("大黄", 4, 3.9);
        Dog d3 = new Dog("小黑", 6, 3.3);
        Dog d4 = new Dog("哮天犬", 1, 3.2);
        //2.准备数组并添加数据
        arr = new Dog[]{d1, d2, d3, d4};
        //3.排序前输出
        for (Dog dog : arr) {
            System.out.println("排序前 = " + dog);
        }

    }
    @Test
    public void test02(){
     /*
          public static <T> void sort(T[] a, Comparator<? super T> c) {}
          ? super Dog : 未知类型 最小是Dog 也可以是Dog的父亲
         */
        Arrays.sort(arr, new Comparator<Animal>() {
            @Override
            public int compare(Animal o1, Animal o2) {
                return Integer.compare(o1.age,o2.age);
            }
        });
    }


    @Test
    public void test01(){
        /*
          public static <T> void sort(T[] a, Comparator<? super T> c) {}
          ? super Dog : 未知类型 最小是Dog 也可以是Dog的父亲
         */
        //按照体重比
        Arrays.sort(arr,new Comparator<Dog>() {
            @Override
            public int compare(Dog o1, Dog o2) {
                return Double.compare(o1.weight,o2.weight);
            }
        });

    }

    @After
    public void test09() {
        //排序后输出
        for (Dog dog : arr) {
            System.out.println("排序后     :" + dog);
        }
    }
}
